home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 140 / Gekkan Dennou Club - 2000.1 Vol. 140 (Japan).7z / Gekkan Dennou Club - 2000.1 Vol. 140 (Japan) (Track 1).bin / tools / has060 / hassrc87.lzh / work.s < prev   
Text File  |  1999-04-24  |  19KB  |  494 lines

  1. ;----------------------------------------------------------------
  2. ;    X68k High-speed Assembler
  3. ;        ワークエリア定義
  4. ;        < work.s >
  5. ;
  6. ;    $Id: work.s,v 3.4  1999  4/24(Sat) 02:55:54 M.Kamada Exp $
  7. ;
  8. ;        Copyright 1990-94  by Y.Nakamura
  9. ;              1996-99  by M.Kamada
  10. ;----------------------------------------------------------------
  11.  
  12.     .include    has.equ
  13.  
  14.  
  15. ;----------------------------------------------------------------
  16. ;    ワークエリア
  17. ;----------------------------------------------------------------
  18.     .offset    0
  19.  
  20. ;----------------------------------------------------------------
  21. ;    メモリ管理
  22. MEMPTR::    .ds.l    1    ;ワークエリアの開始アドレス
  23. MEMLIMIT::    .ds.l    1    ;メモリ不足で中断する限界のアドレス
  24. TEMPPTR::    .ds.l    1    ;ワークエリアの未使用領域へのポインタ
  25. CMDLINEPTR::    .ds.l    1    ;コマンドライン文字列へのポインタ
  26.  
  27. WORKCLRST::            ;(ここから先のワークが0で初期化される)
  28.  
  29. ;----------------------------------------------------------------
  30. ;    ファイル管理
  31. INCLUDEPATH::    .ds.l    1    ;インクルードパス名へのポインタ
  32. TEMPPATH::    .ds.l    1    ;テンポラリパス名へのポインタ
  33. PRNWIDTH::    .ds.w    1    ;PRNファイルの表示幅
  34. PRNPAGEL::    .ds.w    1    ;PRNファイル1ページの行数
  35. PRNTITLE::    .ds.l    1    ;PRNファイルのタイトル文字列へのポインタ
  36. PRNSUBTTL::    .ds.l    1    ;PRNファイルのサブタイトル文字列へのポインタ
  37.  
  38. SOURCENAME::    .ds.b    20    ;ソースファイル名(拡張子を除く)
  39. SOURCEFILE::    .ds.l    1    ;ソースファイル名へのポインタ
  40. INPFILE::    .ds.l    1    ;入力ファイル名へのポインタ(ソース/インクルードファイル)
  41. OBJFILE::    .ds.l    1    ;オブジェクトファイル名へのポインタ
  42. PRNFILE::    .ds.l    1    ;PRNファイル名へのポインタ
  43. SYMFILE::    .ds.l    1    ;シンボルファイル名へのポインタ
  44.  
  45. INPFILPTR::    .ds.l    1    ;入力ファイルポインタ(SOURCEPTR/INCLDPTR)へのポインタ
  46. OUTFILPTR::    .ds.l    1    ;出力ファイルポインタ(TEMPFILPTR/OBJFILPTR)へのポインタ
  47. SOURCEPTR::    .ds.b    F_PTRLEN    ;ソースファイルポインタ
  48. INCLDPTR::    .ds.b    F_PTRLEN    ;インクルードファイルポインタ
  49. TEMPFILPTR::    .ds.b    F_PTRLEN    ;テンポラリファイルポインタ
  50. OBJFILPTR::    .ds.b    F_PTRLEN    ;オブジェクトファイルポインタ
  51.  
  52. PRNHANDLE::    .ds.w    1    ;PRN/シンボルファイルのファイルハンドル
  53. PRNMPAGE::    .ds.w    1    ;PRNファイルのメインページ数(0ならSymbols)
  54. PRNSPAGE::    .ds.w    1    ;PRNファイルのサブページ数
  55. PRNCOUNT::    .ds.w    1    ;PRNファイルの行数カウンタ
  56. PRNDATE::    .ds.b    20    ;PRNファイルの作成日時
  57.     .even
  58.  
  59. REQFILPTR::    .ds.l    1    ;requestファイル名のポインタチェイン先頭
  60. REQFILEND::    .ds.l    1    ;requestファイル名のポインタチェイン末尾
  61.  
  62. INCLDNEST::    .ds.w    1    ;インクルードファイルのネスティング
  63. INCLDINFPTR::    .ds.l    1    ;オープン前のファイル情報へのポインタ
  64. INCLDINF::    .ds.b    INCLDMAXNEST*12        ;オープン前のファイル情報
  65.     .even
  66.  
  67. ;----------------------------------------------------------------
  68. ;    ハッシュテーブル・シンボルテーブル関係
  69.     .quad
  70. SYMHASHPTR::    .ds.l    1    ;シンボルハッシュテーブルへのポインタ
  71. CMDHASHPTR::    .ds.l    1    ;命令ハッシュテーブルへのポインタ
  72.  
  73. SYMTBLBEGIN::    .ds.l    1    ;最初のシンボルテーブルブロックへのポインタ
  74. SYMTBLCURBGN::    .ds.l    1    ;現在のシンボルテーブルブロックへのポインタ
  75. SYMTBLPTR::    .ds.l    1    ;最後に使用したシンボルテーブルへのポインタ
  76. SYMTBLCOUNT::    .ds.w    1    ;残りのシンボルテーブル数
  77.  
  78. ;----------------------------------------------------------------
  79. ;    オプションスイッチ他フラグ
  80. MAKEPRN::    .ds.b    1    ;PRNファイルを作成するならtrue            (-p)
  81. ALLXREF::    .ds.b    1    ;未定義シンボルをXREFするならtrue        (-u)
  82. ALLXDEF::    .ds.b    1    ;全シンボルをXDEFするならtrue            (-d)
  83. OPTIMIZE::    .ds.b    1    ;前方参照の最適化をしないならtrue        (-n)
  84. SYMLEN8::    .ds.b    1    ;シンボル長を8文字にするならtrue        (-8)
  85. MAKESYM::    .ds.b    1    ;シンボルファイルを作成するならtrue        (-x)
  86. NOPAGEFF::    .ds.b    1    ;PRNファイルのページングをしないならtrue    (-f)
  87. DISPTITLE::    .ds.b    1    ;起動時にタイトルを表示しないならtrue        (-l)
  88. WARNLEVEL::    .ds.b    1    ;ワーニング出力レベル(0~4)            (-w)
  89. EXTSHORT::    .ds.b    1    ;外部参照オフセットのデフォルトがロングならtrue    (-e)
  90. MAKESYMDEB::    .ds.b    1    ;SCD用デバッグ情報を出力するならtrue        (-g)
  91. COMPATMODE::    .ds.b    1    ;HAS v2.xと互換のある最適化を行うならtrue    (-c)
  92. LONGABS::    .ds.b    1    ;ロングワードのPC間接を絶対ロングにするならtrue    (-b)
  93. PCTOABSL::    .ds.b    1    ;-b2または-b4のときtrue
  94. PCTOABSLNOTALL::    .ds.b    1    ;-b4でないときtrue
  95. PCTOABSLCAN::    .ds.b    1    ;-b4でなくてlea/pea/jmp/jsrのときtrue
  96. ABSLTOOPC::    .ds.b    1    ;絶対ロングを(d,OPC)にするならtrue        (-1)
  97. ABSLTOOPCCAN::    .ds.b    1    ;ABSLTOOPCを無効化する
  98.  
  99. SWITCHCHAR::    .ds.b    1    ;'/'をスイッチとして認識しないならtrue
  100. MAKESCD::    .ds.b    1    ;SCD用シンボル情報を出力するならtrue
  101. MAKERSECT::    .ds.b    1    ;相対セクション情報を出力するならtrue
  102. COMPATSWA::    .ds.b    1    ;(HAS v2.x互換) -aスイッチが指定されたらtrue
  103. COMPATSWQ::    .ds.b    1    ;(HAS v2.x互換) -qスイッチが指定されたらtrue
  104. ISPRNSTDOUT::    .ds.b    1    ;PRNファイル作成先が標準出力ならtrue
  105.  
  106. NOABSSHORT::    .ds.b    1    ;絶対ショートに対応しないならtrue
  107. NOQUICK::    .ds.b    1    ;クイックイミディエイトへの変換をしないならtrue
  108. NONULDISP::    .ds.b    1    ;0(An)→(An)への変換をしないならtrue
  109. NOBRACUT::    .ds.b    1    ;次の命令へのbra命令を削除しないならtrue
  110.  
  111. OPTMOVEA::    .ds.b    1    ;MOVEAを最適化しないならtrue
  112. OPTCLR::    .ds.b    1    ;CLRを最適化するならtrue
  113. OPTADDASUBA::    .ds.b    1    ;ADDA/SUBAを最適化するならtrue
  114. OPTCMPA::    .ds.b    1    ;CMPAを最適化するならtrue
  115. OPTLEA::    .ds.b    1    ;LEAを最適化するならtrue
  116. OPTSIZESET::    .ds.b    1    ;サイズ指定のコピー
  117. OPTASL::    .ds.b    1    ;ASLを最適化するならtrue
  118. OPTCMP0::    .ds.b    1    ;CMP#0を最適化するならtrue
  119. OPTMOVE0::    .ds.b    1    ;MOVE#0を最適化するならtrue
  120. OPTCMPI0::    .ds.b    1    ;CMPI#0を最適化するならtrue
  121. OPTSUBADDI0::    .ds.b    1    ;SUBI/ADDI#0を最適化するならtrue
  122. OPTBSR::    .ds.b    1    ;直後へのbsrをpeaにするならtrue
  123. OPTJMPJSR::    .ds.b    1    ;jmp/jsrを最適化するならtrue
  124. BRATOJBRA::    .ds.b    1    ;BRA/BSR/BccをJBRA/JBSR/JBccにするならtrue
  125.     .even
  126. X_FSCC::    .ds.w    1    ;FScc→FBcc
  127. X_MOVEP::    .ds.w    1    ;MOVEP展開(展開するCPUのビットが1)
  128.  
  129. MAKEALIGN::    .ds.b    1    ;拡張アラインメント情報を出力するならtrue
  130. MAXALIGN::    .ds.b    1    ;ソース中で使用された最大のアライン値(2^n)
  131.  
  132. ;----------------------------------------------------------------
  133. ;    アセンブルコード
  134.     .even
  135. DSPADRCODE::    .ds.b    1    ;処理中の実効アドレスが(d,An)/(d,PC)ならtrue
  136. DSPADRDEST::    .ds.b    1    ;処理中の実効アドレスがデスティネーションならtrue
  137.  
  138.     .even
  139. CPUTYPE::    .ds.b    1    ;現在のCPUタイプ
  140. CPUTYPE2::    .ds.b    1    ;ColdFireのタイプ
  141.  
  142. EXTSIZE::    .ds.b    1    ;外部参照/未定シンボルのデータサイズ(SZ_WORD or SZ_LONG)
  143. EXTSIZEFLG::    .ds.b    1    ;外部参照/未定シンボルのデータサイズがSZ_LONGならtrue
  144.     .even
  145. EXTLEN::    .ds.l    1    ;外部参照/未定シンボルのデータサイズ(2 or 4)
  146. FPCPID::    .ds.w    1    ;浮動小数点コプロセッサID(b9~11)
  147.  
  148. ;----------------------------------------------------------------
  149. ;    命令解釈
  150. ASMPASS::    .ds.b    1    ;現在のアセンブルパス(1~3)
  151. ISASMEND::    .ds.b    1    ;ソースリストで.endが現れたらtrue
  152.  
  153. ISMACRO::    .ds.b    1    ;処理中の命令がマクロならtrue
  154. CMDOPSIZE::    .ds.b    1    ;処理中の命令のオペレーションサイズ(-1ならサイズなし)
  155.     .quad
  156. CMDTBLPTR::    .ds.l    1    ;処理中の命令・マクロのシンボルテーブルへのポインタ
  157.  
  158. ;----------------------------------------------------------------
  159. ;    ラベル定義
  160. LOCALLENMAX::    .ds.w    1    ;数字ローカルラベルの最大桁数(1~4)
  161. LOCALNUMMAX::    .ds.w    1    ;数字ローカルラベルの最大番号+1(10~10000)
  162.     .quad
  163. LOCALMAXPTR::    .ds.l    1    ;ローカルラベルの次に使用する番号のテーブルへのポインタ
  164. LABNAMEPTR::    .ds.l    1    ;これから定義するラベルへのポインタ
  165. LABNAMELEN::    .ds.w    1    ;これから定義するラベルの長さ(無ければ-1)
  166. LABXDEF::    .ds.b    1    ;これから定義するラベルを外部定義するならtrue
  167.     .even
  168.  
  169. ;----------------------------------------------------------------
  170. ;    条件アセンブル
  171. IFNEST::    .ds.w    1    ;条件アセンブルのネスティング
  172. IFSKIPNEST::    .ds.w    1    ;.ifの不成立部読み飛ばしのネスティング
  173. ISIFSKIP::    .ds.b    1    ;.ifの不成立部の読み飛ばし中ならtrue
  174.     .even
  175.  
  176. ;----------------------------------------------------------------
  177. ;    ロケーションカウンタ
  178.     .quad
  179. LOCATION::    .ds.l    1    ;現在のセクションのロケーションカウンタ
  180. LTOPLOC::    .ds.l    1    ;処理中の行頭のロケーションカウンタ'*'
  181. LASTSYMLOC::    .ds.l    1    ;最後にラベルに定義したロケーションカウンタ
  182. LCURLOC::    .ds.l    1    ;現在処理中のロケーションカウンタ'$'
  183. LOCOFFSET::    .ds.l    1    ;最適化時のロケーションオフセット
  184. SECTION::    .ds.b    1    ;現在のセクション番号
  185. ORGNUM::    .ds.b    1    ;現在のorgセクション番号
  186.     .quad
  187. LOCCTRBUF::    .ds.l    N_SECTIONS    ;各セクションのロケーションカウンタ
  188. LOCOFFSETBUF::    .ds.l    N_SECTIONS    ;各セクションの最適化ロケーションオフセット
  189. ORGNUMBUF::    .ds.b    N_SECTIONS    ;各セクションのorgセクション番号
  190.  
  191. OFFSYMMOD::    .ds.b    1    ;0=offsymでない,-1=offsymでシンボルなし,1=offsymでシンボルあり
  192.     .quad
  193. OFFSYMVAL::    .ds.l    1    ;offsymで初期値を与えるシンボルがあるときの初期値
  194. OFFSYMSYM::    .ds.l    1    ;offsymで初期値を与えるシンボル
  195. OFFSYMTMP::    .ds.l    1    ;offsymで初期値を与えるシンボルがあるときに
  196.                 ;初期値を与えるシンボルの位置の
  197.                 ;ロケーションカウンタを格納する仮のシンボル
  198. OFFSYMNUM::    .ds.w    1    ;ハッシュ関数値を分散させるためのカウンタ
  199.  
  200. ;----------------------------------------------------------------
  201. ;    オブジェクト出力
  202. ISOBJOUT::    .ds.b    1    ;オブジェクト出力を抑制するならtrue
  203.     .even
  204. OBJLENCTR::    .ds.l    1    ;オブジェクトファイル長カウンタ
  205. OBJCONCTR::    .ds.w    1    ;定数オブジェクト出力カウンタ
  206. OBJCONBUF::    .ds.b    256    ;定数オブジェクト出力バッファ
  207.  
  208. ;----------------------------------------------------------------
  209. ;    オペランド解釈
  210. EXPRSIZE::    .ds.b    1    ;式に指定されたサイズ
  211. EXPRISSTR::    .ds.b    1    ;式が文字列を含むならtrue
  212.     .even
  213. EXPRSPSAVE::    .ds.l    1    ;sp値保存用
  214.  
  215. RPNSTACK::    .ds.w    256    ;逆ポーランド式変換/演算用スタック
  216. ROFSTSYMNO::    .ds.w    1    ;オフセット付き外部参照でのシンボル番号
  217. EXPRORGNUM::    .ds.w    1    ;式のorgセクション番号
  218.  
  219. OPRBUF::    .ds.w    MAXLINELEN*2    ;オペランドの中間コード変換バッファ/文字列処理用ワーク
  220. RPNBUF::
  221. EABUF1::    .ds.b    EABUFSIZE    ;実効アドレス解釈バッファ
  222. EABUF2::    .ds.b    EABUFSIZE    ;    〃
  223.  
  224. RPNSIZEEX::    .ds.b    1    ;式のサイズ
  225.     .even
  226. RPNLENEX::    .ds.w    1    ;逆ポーランド式の長さ(-1なら定数/0なら式がない)
  227. RPNBUFEX::    .ds.w    128    ;逆ポーランド式バッファ/定数値
  228.  
  229. ;----------------------------------------------------------------
  230. ;    エラー処理
  231. NUMOFERR::    .ds.w    1    ;Fatal errorの数
  232. SPSAVE::    .ds.l    1    ;エラー処理後のspの値
  233. ERRRET::    .ds.l    1    ;エラー処理後の戻りアドレス
  234. ERRMESSYM::    .ds.l    1    ;エラーメッセージに埋め込むシンボル
  235.  
  236. ;----------------------------------------------------------------
  237. ;    ソフトウェアエミュレーションのチェック
  238. SOFTFLAG::    .ds.w    1    ;ソフトウェアエミュレーションかどうか
  239.  
  240. ;----------------------------------------------------------------
  241. ;    エラッタ
  242. F43GTEST::    .ds.b    1    ;F43G対策を行うか
  243.     .quad
  244. F43GPTR::    .ds.l    1    ;次に使用するレコードへのポインタ
  245. F43GREC::    .ds.b    16*5
  246. ;    .ds.l    1    ;直後の命令のレコードへのポインタ(固定)
  247. ;    .ds.l    1    ;直前の命令のレコードへのポインタ(固定)
  248. ;    .ds.l    4    ;T_NOPを挿入した位置(-1=1番目ではない)
  249. ;    .ds.b    1    ;5命令の中で該当するものを示すフラグ(0=いずれも該当しない)
  250. ;    .ds.b    1    ;使用しているアドレスレジスタのフラグ(2~5番目に該当するとき)
  251. ;    .ds.b    2
  252.  
  253. IGNORE_ERRATA::    .ds.b    1    ;-1=エラッタの対策を禁止
  254.  
  255. ;----------------------------------------------------------------
  256. ;    シンボルの上書き禁止の強化
  257. OWSET::        .ds.b    1    ;-1=setの上書き禁止を強化する
  258. OWOFFSYM::    .ds.b    1    ;-1=offsymの上書き禁止を強化する
  259.  
  260. ;----------------------------------------------------------------
  261. ;プレデファインシンボル
  262.     .even
  263. CPUSYMBOL::    .ds.l    1    ;プレデファインシンボルCPUのシンボルテーブルへのポインタ
  264. STARTCPU::    .ds.l    1    ;アセンブル開始時のCPU指定
  265.  
  266. ASSEMBLEDATE::    .ds.l    1    ;_GETDATEの返却値
  267. ASSEMBLETIM2::    .ds.l    1    ;_GETTIM2の返却値
  268.  
  269. PREDEFINE::    .ds.b    1    ;プレデファインシンボルを使うならtrue
  270.         .even
  271.  
  272. ;----------------------------------------------------------------
  273. ;    PRNファイル
  274.     .quad
  275. LINENUM::    .ds.l    1    ;処理中の行番号
  276. LINEPTR::    .ds.l    1    ;処理中の行バッファを指すポインタ
  277. LINEBUF::    .ds.b    MAXLINELEN    ;処理中の行の読み込みバッファ
  278.  
  279. PRNLATR::    .ds.w    1    ;処理中の行の場所(0:ソース/1:インクルード/2:マクロ展開)
  280. PAGEFLG::    .ds.w    1    ;PRNファイルの改ページフラグ
  281. PFILFLG::    .ds.b    1    ;PRNファイル中のファイル名表示フラグ
  282. ISNLIST::    .ds.b    1    ;.nlistならtrue
  283. ISLALL::    .ds.b    1    ;.lallならtrue
  284. PADVFLG::    .ds.b    1    ;現在の行がPRNファイルに先行出力済みならtrue
  285.     .even
  286. PRNLPTR::    .ds.l    1    ;PRNファイルコード部を指すポインタ
  287. PRNCODE::    .ds.b    512    ;PRNファイルコード部のバッファ
  288.         .ds.b    2    ;エンドコード用のダミー
  289.  
  290. ;----------------------------------------------------------------
  291. ;    マクロ定義・展開
  292. MACLOCSNO::    .ds.w    1    ;マクロ登録でのローカルシンボル番号
  293. MACSYMPTR::    .ds.l    1    ;定義中のマクロのシンボル属性テーブルアドレス
  294. REPTSKIPNEST::    .ds.w    1    ;登録時のrept/irp/irpc命令のネスティング
  295. MACDEFEND::    .ds.l    1    ;マクロ/irp/irpc登録時のパラメータ終了位置へのポインタ
  296. MACMODE::    .ds.b    1    ;現在登録中の命令が(0:マクロ/正:irp,irpc/負:rept)
  297. ISMACDEF::    .ds.b    1    ;現在マクロ等を定義中ならtrue
  298.     .even
  299.  
  300. MACNEST::    .ds.w    1    ;マクロ展開のネスティング
  301. MACREPTNEST::    .ds.w    1    ;マクロ/rept展開のネスティング
  302. REPTCOUNT::    .ds.w    1    ;rept展開の繰り返し回数(マクロなら0)
  303. IRPPARAPTR::    .ds.l    1    ;irp/irpc展開の実引数リストへのポインタ(rept展開なら0)
  304. MACLOCSMAX::    .ds.w    1    ;今までに使用したローカルシンボルの最大番号
  305. MACLOCSBGN::    .ds.w    1    ;現在のマクロ展開で使用するローカルシンボルの開始番号
  306. MACLBGNPTR::    .ds.l    1    ;現在展開中のマクロ行の開始位置へのポインタ
  307. MACLPTR::    .ds.l    1    ;現在展開中のマクロ行へのポインタ
  308. MACINFPTR::    .ds.l    1    ;マクロ展開ネスティング前の情報へのポインタ
  309. MACINF::    .ds.b    MACROMAXNEST*24    ;マクロ展開ネスティング前の情報
  310. MACSIZE::    .ds.b    1    ;現在展開中のマクロのサイズ指定
  311. MACCOUNT::    .ds.b    1    ;マクロの引数の個数
  312.     .even
  313. MACPARAPTR::    .ds.l    1    ;マクロ引数バッファへのポインタ
  314. MACPARAEND::    .ds.l    1    ;マクロ引数バッファ終端へのポインタ
  315. MACPARABUF::    .ds.b    2048    ;マクロ登録/展開用引数バッファ
  316.  
  317. ;----------------------------------------------------------------
  318. ;    SCDデバッグ情報
  319. SCDFILE::    .ds.l    1    ;SCDソースファイル名へのポインタ
  320. SCDFILENUM::    .ds.l    1    ;SCDソースファイル名の延長テーブルオフセット
  321. NUMOFLN::    .ds.l    1    ;行番号データの数
  322. EXNAMELEN::    .ds.l    1    ;シンボル名延長部の長さ
  323. EXNAMEPTR::    .ds.l    1    ;シンボル名延長部チェインの先頭
  324. NUMOFSCD::    .ds.l    1    ;拡張シンボル情報の数
  325. NUMOFTAG::    .ds.l    1    ;タグ情報の数
  326. NUMOFFNC::    .ds.l    1    ;関数情報の数
  327. NUMOFLOC::    .ds.l    1    ;ローカル変数情報の数
  328. NUMOFSECT::    .ds.l    1    ;セクション情報の数(=6)
  329. NUMOFGLB::    .ds.l    1    ;グローバル変数情報の数
  330. SCDTEMP::    .ds.b    SCD_TBLLEN    ;拡張シンボル情報の一時バッファ
  331.  
  332. SCDATTRIB::    .ds.b    1    ;拡張シンボル属性($1x:タグ/$2x:関数)
  333. SCDATRPREV::    .ds.b    1    ;1つ前の拡張シンボル属性
  334. SCDLN::        .ds.w    1    ;最後に使用した.ln行番号
  335.  
  336. SCDLNPTR::    .ds.l    1    ;SCD行番号データへのポインタ
  337. SCDDATAPTR::    .ds.l    1    ;SCD拡張シンボル情報へのポインタ
  338. LNOFST::    .ds.l    1    ;次の行番号データへのオフセット
  339. GLBDEFNUM::    .ds.l    1    ;グローバル変数の位置
  340. TAGDEFNUM::    .ds.l    1    ;タグ定義開始位置
  341. FNCDEFNUM::    .ds.l    1    ;関数定義開始位置
  342. FNCBFNUM::    .ds.l    1    ;関数開始番号
  343. FNCBBNUM::    .ds.l    1    ;ブロック開始番号チェインの末尾
  344. TAGBEGIN::    .ds.l    1    ;タグ情報開始番号(tag検索用)
  345.  
  346. ;----------------------------------------------------------------
  347. ;    オブジェクトファイル生成
  348. DSBSIZE::    .ds.l    1    ;.ds.bで確保する領域のサイズ
  349. XREFSYMNO::    .ds.l    1    ;外部参照シンボルの番号
  350. ISXDEFMOD::    .ds.b    1    ;外部定義シンボルの修正の必要があればtrue
  351. ISUNDEFSYM::    .ds.b    1    ;未定義シンボルがあればtrue
  352.     .even
  353.  
  354. ;----------------------------------------------------------------
  355. ;    最適化
  356. OPTFLAG::    .ds.b    1    ;最適化が行なわれたならtrue
  357. OPTCOUNT::    .ds.b    1    ;最適化回数カウント
  358. OPTMOREFLG::    .ds.b    1    ;1回目の最適化ならESZ_OPT|SZ_LONG(伸長後の縮小を許可する)
  359.     .even
  360.  
  361. OPTEXTPOS::    .ds.l    1    ;拡張ワードのテンポラリファイル位置
  362. OPTEXTCODE::    .ds.w    1    ;修正する拡張ワード
  363. OPTDSPPOS::    .ds.l    1    ;命令コードのテンポラリファイル位置
  364. OPTDSPCODE::    .ds.w    1    ;修正する命令コード(ディスプレースメントの最適化用)
  365.  
  366. ;----------------------------------------------------------------
  367. LOCSYMBUF::    .ds.b    LOCSYMBUFSIZE+256    ;マクロ内のローカルシンボル名のバッファ
  368.                 ;(1つのマクロ定義で使えるローカルシンボルの最大サイズ)
  369.  
  370. ;----------------------------------------------------------------
  371. ;    ハッシュテーブル本体
  372.     .quad
  373. SYMHASHTBL::    .ds.l    SYMHASHSIZE    ;シンボルハッシュテーブル
  374. CMDHASHTBL::    .ds.l    CMDHASHSIZE    ;命令ハッシュテーブル
  375.  
  376. ;----------------------------------------------------------------
  377.     .quad
  378. WORKSIZE::
  379.  
  380.  
  381. ;----------------------------------------------------------------
  382.     .bss
  383.  
  384.     .quad
  385. WORKBEGIN::    .ds.b    WORKSIZE    ;ワークエリア本体
  386.  
  387.  
  388. ;----------------------------------------------------------------
  389. ;    スタックエリア
  390. ;----------------------------------------------------------------
  391.  
  392.     .stack
  393.  
  394.     .quad
  395.     .ds.b    4096            ;スタックエリア
  396. STACKBTM::
  397.  
  398.  
  399. ;----------------------------------------------------------------
  400.     .end
  401.  
  402. ;----------------------------------------------------------------
  403. ;    $Log: work.s,v $
  404. ;    Revision 3.4  1999  4/24(Sat) 02:55:54 M.Kamada
  405. ;    +84 マクロ内のローカルシンボルが多すぎるとバスエラーが出る不具合を修正
  406. ;
  407. ;    Revision 3.3  1999  3/19(Fri) 16:03:39 M.Kamada
  408. ;    +83 数字ローカルラベルの最大桁数を4桁まで選択可能
  409. ;
  410. ;    Revision 3.2  1999  3/ 4(Thu) 02:34:33 M.Kamada
  411. ;    +82 エラーメッセージを日本語化
  412. ;    +82 quad追加
  413. ;    +82 F43GRECのサイズを14→16バイト
  414. ;    +82 スタックエリアのサイズを1024→4096バイト
  415. ;
  416. ;    Revision 3.1  1999  2/27(Sat) 23:46:12 M.Kamada
  417. ;    +81 ソースリストのフォーマットを変更(実行ファイルは+80とまったく同じ)
  418. ;
  419. ;    Revision 3.0  1999  2/25(Thu) 04:57:20 M.Kamada
  420. ;    +80 ColdFire対応
  421. ;    +80 .offsym <初期値>,<シンボル>
  422. ;    +80 setでset以外で定義されたシンボルの上書き禁止
  423. ;
  424. ;    Revision 2.9  1998 10/10(Sat) 02:35:31 M.Kamada
  425. ;    +77 -pのとき.INSERTで1度に256バイト以上読み出すと誤動作する
  426. ;
  427. ;    Revision 2.8  1998  8/18(Tue) 20:02:35 M.Kamada
  428. ;    +72 .sizemの第2引数のローカルシンボルにマクロの引数の個数を定義する
  429. ;
  430. ;    Revision 2.7  1998  4/13(Mon) 04:29:15 M.Kamada
  431. ;    +64 エラッタの対策を禁止するスイッチを追加
  432. ;
  433. ;    Revision 2.6  1998  3/31(Tue) 02:09:48 M.Kamada
  434. ;    +63 jmp/jsrを最適化する
  435. ;
  436. ;    Revision 2.5  1998  1/24(Sat) 17:18:30 M.Kamada
  437. ;    +57 疑似命令.sizemを追加
  438. ;
  439. ;    Revision 2.4  1998  1/10(Sat) 15:35:59 M.Kamada
  440. ;    +56 -f43gを削除
  441. ;    +56 MOVE to USPのエラッタを回避
  442. ;
  443. ;    Revision 2.3  1998  1/ 5(Mon) 01:04:04 M.Kamada
  444. ;    +55 -b[n]
  445. ;
  446. ;    Revision 2.2  1997 10/13(Mon) 02:11:04 M.Kamada
  447. ;    +51 直後へのbsr→pea
  448. ;    +52 jmp/jsrを最適化する
  449. ;
  450. ;    Revision 2.1  1997  9/22(Mon) 03:13:09 M.Kamada
  451. ;    +47 movepとfsccのエミュレーションを拡充
  452. ;
  453. ;    Revision 2.0  1997  9/15(Mon) 03:59:07 M.Kamada
  454. ;    +45 shiftのためにマクロの引数の展開方法を変更
  455. ;
  456. ;    Revision 1.9  1997  9/17(Wed) 17:44:36 M.Kamada
  457. ;    +44 software emulationの命令を展開する
  458. ;
  459. ;    Revision 1.8  1997  7/ 8(Tue) 14:31:07 M.Kamada
  460. ;    +39 -1の挙動を修正する
  461. ;
  462. ;    Revision 1.7  1997  6/26(Thu) 22:05:59 M.Kamada
  463. ;    +33 プレデファインシンボルCPUに対応する
  464. ;    +34 プレデファインシンボル__DATE__,__TIME__に対応する
  465. ;    +35 CMP.bwl #0,Dn→TST.bwl Dn
  466. ;    +36 MOVE.bw #0,Dn→CLR.bw Dn
  467. ;    +37 -up,-dpでプレデファインシンボルの禁止,許可
  468. ;    +38 CMPI.bwl #0,<ea>→TST.bwl <ea>
  469. ;
  470. ;    Revision 1.6  1997  4/ 5(Sat) 18:43:26 M.Kamada
  471. ;    +24 MOVEAを最適化する
  472. ;    +25 CLRを最適化する
  473. ;    +26 ADDA/CMPA/SUBAを最適化する
  474. ;    +28 LEAを最適化する
  475. ;    +29 ASLを最適化する
  476. ;
  477. ;    Revision 1.5  1997  3/14(Fri) 22:59:17 M.Kamada
  478. ;    +18 サイズ指定のない定数でない絶対ロングを(d,OPC)にする
  479. ;    +20 -1の挙動を修正
  480. ;
  481. ;    Revision 1.4  1996 11/13(Wed) 18:21:16 M.Kamada
  482. ;    +07 F43G対策
  483. ;
  484. ;    Revision 1.3  1994/06/09  14:23:34  nakamura
  485. ;    バグフィックスにともなうワークの追加。
  486. ;
  487. ;    Revision 1.2  1994/03/06  02:53:50  nakamura
  488. ;    仕様拡張に伴うワークエリアの追加
  489. ;
  490. ;    Revision 1.1  1994/02/13  15:31:52  nakamura
  491. ;    Initial revision
  492. ;
  493. ;
  494.